package anbow.ch3;

/**
 * 字符串解码
 * abc3[cd]xyz ： abccdcdcdxyz
 * 
 * 思路：从头开始逐个字符(参与运算)遍历
 *   若是字母字符：直接拼接
 *   若是数字字符：需要将数字字符序列 转换成 数字
 *   若是 【，略过
 *   若在【】内部：递归，递归对象是【】内部的子串
 *       如果获得子串：不可能
 *       从索引入手：递归时（方法被重新调用），方法内的变量将会重新初始化，为什么？局部变量，
 *       可以使用全局变量（类变量，类的属性）
 *   若是 】，略过
 * 
 */

public class DecodingString {

	static int i;
	
	public static void main(String[] args) {
		
		String s = "abc3[c4d]xyz";		
		String s2 = decodingString(s);		
		System.out.println(s2);
	}

	//方法decodingString 并不是我们去递归的方法
	private static String decodingString(String s) {		
		i=0;
		return unfold(s);
	}

	//abc3[c4[asd]d]xyz
	private static String unfold(String s) {
		String ans = "";//存放结果
		while(i<s.length() && s.charAt(i) != ']') {			
			if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
				ans += s.charAt(i++);
			}else {
				int k = 0;//计算保存【之前的数字
				while(i<s.length() && s.charAt(i)>='0' && s.charAt(i)<='9') {
					//k = k*10 + Integer.valueOf(s.charAt(i));
					k = k*10 + (s.charAt(i++)-'0');
				}
				i++;//略过【
				String tmp = unfold(s);
				i++;//略过】
				//拼接tmp k次
				while(k>0) {
					ans += tmp;
					k--;
				}
			}
		}
		return ans;
	}
	
	

}






















